#include "widget.h"
#include "ui_widget.h"

#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //listWidget
    //在listWidget中添加初始化元素
    ui->listWidget->addItem("C++");
    ui->listWidget->addItem("Java");
    ui->listWidget->addItem("Python");
    //两者相同
    //在QlistWidget中，可以设置字体属性，图标，文字大小，是否被选中等状态
    //ui->listWidget->addItem(new QListWidgetItem("C++"));
    //ui->listWidget->addItem(new QListWidgetItem("Java"));
    //ui->listWidget->addItem(new QListWidgetItem("Python"));

    //TableWidget
    //创建3行
    ui->tableWidget->insertRow(3);
    ui->tableWidget->insertRow(4);
    ui->tableWidget->insertRow(5);

    //创建3列
    ui->tableWidget->insertColumn(3);
    ui->tableWidget->insertColumn(4);

    //给3个列设定列名(设置水平方向的表头)
    ui->tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("性别"));
    ui->tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("电话"));

    //添加数据
    ui->tableWidget->setItem(0,3, new QTableWidgetItem("男"));
    ui->tableWidget->setItem(0,4, new QTableWidgetItem("111"));

    ui->tableWidget->setItem(1,3, new QTableWidgetItem("女"));
    ui->tableWidget->setItem(1,4, new QTableWidgetItem("222"));

    //QTreeWidget
    //设置根节点的名字
    ui->treeWidget->setHeaderLabel("动物");

    //新增顶层节点
    QTreeWidgetItem* item1 = new QTreeWidgetItem();
    // 每个节点都可以设置多个列. 此处为了简单就只设置一列了.
    item1->setText(0, "猫");
    // 添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item1);

    // 新增顶层节点
    QTreeWidgetItem* item2 = new QTreeWidgetItem();
    // 每个节点都可以设置多个列
    item2->setText(0, "狗");
    // 添加到顶层节点中.
    ui->treeWidget->addTopLevelItem(item2);

    // 新增顶层节点
    QTreeWidgetItem* item3 = new QTreeWidgetItem();
    // 每个节点都可以设置多个列
    item3->setText(0, "鸟");
    // 添加到顶层节点中.
     ui->treeWidget->addTopLevelItem(item3);

    // 添加一些子节点
    QTreeWidgetItem* item4 = new QTreeWidgetItem();
    item4->setText(0, "中华田园猫");
    item1->addChild(item4);

    QTreeWidgetItem* item5 = new QTreeWidgetItem();
    item5->setText(0, "布偶猫");
    item1->addChild(item5);

    QTreeWidgetItem* item6 = new QTreeWidgetItem();
    item6->setText(0, "暹罗猫");
    item1->addChild(item6);

}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_insert_clicked()
{
    //1.先获取到输入框中的内容
    const QString& text = ui->lineEdit->text();
    //2.添加到QListWidget中
    ui->listWidget->addItem(text);
}

void Widget::on_pushButton_sub_clicked()
{
    //1.先获取到被选中的元素
    int row = ui->listWidget->currentRow();
    if(row < 0)
        return;

    //2.按照行号来删除元素
    ui->listWidget->takeItem(row);
}

void Widget::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{
    // 通过这个槽函数来感知到变化
    if(current != nullptr){
        qDebug() << "当前选中的元素: " << current->text();
    }
    if(previous != nullptr){
        qDebug() << "上次选中的元素: " << previous->text();
    }
}

void Widget::on_pushButton_insertRow_clicked()
{
    //需要知道当前一共多少行
    int rowCount = ui->tableWidget->rowCount();
    //在最后一行之后新增行
    //注意此处的参数是“下标”，表四新增之后的这一行是第几行
    ui->tableWidget->insertRow(rowCount);
}

void Widget::on_pushButton_deleteRow_clicked()
{
    //获取到选中的行号
    int curRow = ui->tableWidget->currentRow();
    //删除这一列
    ui->tableWidget->removeRow(curRow);
}

void Widget::on_pushButton_insertColumn_clicked()
{
    //需要知道当前一共多少行
    int colCount = ui->tableWidget->columnCount();
    //在对应位置新增这一列
    ui->tableWidget->insertColumn(colCount);
    //设置列名(从输入框中获取列)
    const QString& text = ui->lineEdit_2->text();
    ui->tableWidget->setHorizontalHeaderItem(colCount, new QTableWidgetItem(text));
}

void Widget::on_pushButton_deleteColumn_clicked()
{
    //获取到选中的列号
    int curCol = ui->tableWidget->currentColumn();
    //删除这一列
    ui->tableWidget->removeColumn(curCol);
}

void Widget::on_pushButton_insertTopLevelItem_clicked()
{
    // 获取到输入框中的内容
    const QString& text = ui->lineEdit->text();
    // 构造一个 QTreeWidgetItem
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0, text);
    // 添加到顶层节点中
    ui->treeWidget->addTopLevelItem(item);
}

void Widget::on_pushButton_insertItem_clicked()
{
    // 获取到当前选中的节点
    QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();
    if (currentItem == nullptr)
       return;
    // 获取到输入框的内容
    const QString& text = ui->lineEdit_3->text();
    // 构造一个 QTreeWidgetItem
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0, text);
    // 插入到选中节点的子节点中
    currentItem->addChild(item);
}



void Widget::on_pushButton_deleteItem_clicked()
{
    // 获取到选中的元素
    QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();
    if (currentItem == nullptr)
        return;

    // 删除选中的元素, 需要先获取到父元素, 通过父元素进行删除
    QTreeWidgetItem* parent = currentItem->parent();
    if (parent == nullptr) {
        // 顶层元素
        int index = ui->treeWidget->indexOfTopLevelItem(currentItem);
        ui->treeWidget->takeTopLevelItem(index);
    } else {
        // 普通元素
        parent->removeChild(currentItem);
    }
}
